package com.yhh.xiaohongshugateway.auth;

import cn.dev33.satoken.reactor.filter.SaReactorFilter;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Date 2025-05-01 23:33
 * @ClassName: SaTokenConfigure
 * @Description: SaToken权限配置类
 */
@Configuration
public class SaTokenConfigure {
    /**
     * 注册 Sa-Token 拦截器，打开注解式鉴权功能
     */
    @Bean
    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
                // 指定 [拦截路由]
                .addInclude("/**") /* 拦截全部path */
                //  指定 [放行路由]
//                .addExclude("/favicon.ico")
                //鉴权方法，每次访问进入
                .setAuth(obj -> {
                    // 登录校验 -- 拦截所有路由，并排除/user/doLogin 用于开放登录
//                    SaRouter.match("/**","/user/doLogin", r -> StpUtil.checkLogin());
                    SaRouter.match("/**")
                            .notMatch("/auth/user/login") //排除登录
                            .notMatch("/auth/verification/code/send") //排除验证码发送
                            .check(r -> StpUtil.checkLogin()); //校验是否登录

                    //权限认证 不同模块鉴权
//                    SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
//                    SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
//                    SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
//                    SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));




                })
                //异常处理方法
                .setError(e -> {
                    return SaResult.error(e.getMessage());
                });
    }


}
